package com.example.poitest.test1;


import org.springframework.util.ResourceUtils;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;

public class Test3 {
    public static void main(String[] args) throws FileNotFoundException {
        // 加载导出模板
//        ExcelTemplate excel = new ExcelTemplate("E:\\000temp\\加班表3.xlsx");
        String srcFilePath = ResourceUtils.getFile("classpath:export_templates/加班表3.xlsx").getPath();
        ExcelTemplate excel = new ExcelTemplate(srcFilePath);

        if (!excel.examine())
            return;
        // 使用一个Map来存储所有的行区域，
        // 每个行区域对应Map的一个键
        LinkedHashMap<Integer, LinkedList<String>> rows = new LinkedHashMap<>();
        // 创建第一个行区域里面填充的值，ExcelTemplate会按从左至右，
        // 从上往下的顺序，挨个填充区域里面的${}，所以创建的时候注意顺序就好
        LinkedList<String> row1 = new LinkedList<>();
        row1.add("1");
        row1.add("123");
        row1.add("张三");
        row1.add("2019/9/10");
        row1.add("2019/9/10");
        row1.add("2019/9/10");
        row1.add("5");
        row1.add("项目上线");
        // 把第一个行区域row1添加进入rows
        rows.put(1, row1);
        // 创建第二个行区域里面填充的值
        LinkedList<String> row2 = new LinkedList<>();
        row2.add("2");
        row2.add("1234");
        row2.add("李四");
        row2.add("2019/9/11");
        row2.add("2019/9/11");
        row2.add("2019/9/11");
        row2.add("6");
        row2.add("临时突发状况");
        // 把第二个行区域row2添加进入rows
        rows.put(2, row2);
        //边框会影响导出结果： 边框行数要大于 数据行数！！

        // 创建需要填充替换的值
        Map<String, String> fill = new HashMap<>();
        fill.put("总加班时长", "11");
        fill.put("公司名称", "淘宝有限公司");
        fill.put("创建人", "王麻子");
        fill.put("创建日期", "2019-9-12");

//        response.setContentType("octets/stream");
//        response.addHeader("Content-Disposition", "attachment;filename=test.xlsx");
//        response.addHeader("Pargam", "no-cache");
//        response.addHeader("Cache-Control", "no-cache");
        try {
            // 第一个参数，需要操作的sheet的索引
            // 第二个参数，需要复制的区域的第一行索引
            // 第三个参数，需要复制的区域的最后一行索引
            // 第四个参数，需要插入的位置的索引
            // 第五个参数，填充行区域中${}的值
            // 第六个参数，是否需要删除原来的区域
            // 需要注意的是，行的索引一般要减一
            excel.addRowByExist(0, 16, 16, 17, rows, true);
            // 第一个参数，需要操作的sheet的索引
            // 第二个参数，替换sheet当中${<变量的值>}的值
            excel.fillVariable(0, fill);


//            try(OutputStream os= response.getOutputStream()){
//                os.write(excel.getBytes());
//                os.flush();
//            }

            OutputStream fileOutputStream;
            fileOutputStream = new FileOutputStream("E:\\000temp\\加班表3导出.xlsx");
            fileOutputStream.write(excel.getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
